#pragma once 

#include "base.h"


namespace helper {
namespace demo {

class OptionsArgs  {
public:
  static OptionsArgs create(const DBOptions & database = DBOptions()
    , const ReadOptions & read = ReadOptions()
    , const WriteOptions & write = WriteOptions()
    , const ColumnFamilyOptions & cf = ColumnFamilyOptions()
  );

public:

  OptionsArgs();
  OptionsArgs(const DBOptions & database, const ReadOptions & read, const WriteOptions & write, const ColumnFamilyOptions & cf);

  OptionsArgs(const OptionsArgs & optArgs) ;

  ~OptionsArgs();

  const ReadOptions & read() const ;
  ReadOptions & read() ;

  const WriteOptions & write() const ;
  WriteOptions & write() ;


  const ColumnFamilyOptions & columnFamily() const ;
  ColumnFamilyOptions & columnFamily() ;

  const DBOptions & database() const ;
  DBOptions & database() ;

  const Options & open() const ;
  Options & open() ;

private:
  ReadOptions read_;
  WriteOptions write_;
  Options options_;

  DBOptions & database_; // = &options_
  ColumnFamilyOptions & columnFamily_; // = &options_
};

}//namespace demo
}//namespace helper
